package cn.edu.swu.miniwebsvr.core;

import cn.edu.swu.miniwebsvr.handler.DefaultHandler;
import cn.edu.swu.miniwebsvr.handler.EchoHandler;
import cn.edu.swu.miniwebsvr.handler.TimeHandler;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
//存储服务器运行的配置参数
//包括服务器监听端口号、网页根目录路径、URL路径与处理器的映射表（不同的URL路径对应不同的处理器)
public class Config {
    private final int port = 8080;
    private final String webRoot = "webroot";
    private final Map<String, Handler> handlerMap = new HashMap<>();

    private Config() {
        handlerMap.put("/", new DefaultHandler());
        handlerMap.put("/time", new TimeHandler());//返回当前的时间
        handlerMap.put("/echo", new EchoHandler());//返回用户输入的参数
    }

    // 对外提供唯一实例的入口
    public static Config getInstance() {
        return Holder.INSTANCE;
    }
    // 静态内部类：懒加载+线程安全的单例实现（Holder模式）
    private static class Holder {
        private static final Config INSTANCE = new Config();
    }

    public int getPort() {
        return port;
    }

    public String getWebRoot() {
        return webRoot;
    }

    public Handler getHandler(String url) {
        // TODO: [学号/姓名] 实现 URL 精确匹配或基础路径匹配逻辑
        for(Iterator<String> iterator=handlerMap.keySet().iterator();iterator.hasNext();){
            String key=iterator.next();
            if (url.endsWith(key)){
                return handlerMap.get(key);
            }
        }
        return handlerMap.get('/');
//        // 1. 处理 URL 中的查询参数（去掉 ? 及后面的内容，只保留路径部分）
//        String path = url;
//        int queryIndex = url.indexOf('?');
//        if (queryIndex != -1) {
//            path = url.substring(0, queryIndex);
//        }
//
//        // 2. 精确匹配：直接查找完整路径
//        Handler exactHandler = handlerMap.get(path);
//        if (exactHandler != null) {
//            return exactHandler;
//        }
//
//        // 3. 尝试匹配原始 URL（保留你希望的这行代码）
//        Handler originalUrlHandler = handlerMap.get(url);
//        if (originalUrlHandler != null) {
//            return originalUrlHandler;
//        }
//
//        // 4. 基础路径匹配：逐级查找父路径
//        String currentPath = path;
//        while (true) {
//            int lastSlashIndex = currentPath.lastIndexOf('/');
//            if (lastSlashIndex <= 0) {
//                break;
//            }
//            currentPath = currentPath.substring(0, lastSlashIndex);
//            Handler parentHandler = handlerMap.get(currentPath);
//            if (parentHandler != null) {
//                return parentHandler;
//            }
//            if (currentPath.isEmpty()) {
//                currentPath = "/";
//            }
//        }
//
//
//        return handlerMap.get('/');
    }
}